package com.wedimob.boxinternetprotection;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.BaseAdapter;

import com.wedimob.boxinternetprotection.dummy.FreeboxContent;
import com.wedimob.boxinternetprotection.freebox.Freebox;
import com.wedimob.tools.Preferences;

/**
 * An activity representing a list of MacAddresses. This activity has different
 * presentations for handset and tablet-size devices. On handsets, the activity
 * presents a list of items, which when touched, lead to a
 * {@link MacAddressDetailActivity} representing item details. On tablets, the
 * activity presents the list of items and item details side-by-side using two
 * vertical panes.
 * <p>
 * The activity makes heavy use of fragments. The list of items is a
 * {@link MacAddressListFragment} and the item details (if present) is a
 * {@link MacAddressDetailFragment}.
 * <p>
 * This activity also implements the required
 * {@link MacAddressListFragment.Callbacks} interface to listen for item
 * selections.
 */
public class MacAddressListActivity extends FragmentActivity
        implements MacAddressListFragment.Callbacks {

    /**
     * Whether or not the activity is in two-pane mode, i.e. running on a tablet
     * device.
     */
    private boolean mTwoPane;
    private Preferences prefs;
    private Freebox freebox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Check preferences is correctly setted
        prefs = new Preferences(this);
        prefs.load();
        if (!prefs.isConfigured()) {
            Intent configIntent = new Intent(this,
                    SettingsActivity.class);
            startActivity(configIntent);
            return;
        }

        freebox = new Freebox(prefs.getFreeboxUrl());

        setContentView(R.layout.activity_macaddress_list);

        MacAddressListFragment fragment = (MacAddressListFragment) getSupportFragmentManager()
                .findFragmentById(R.id.macaddress_list);
        BaseAdapter adapter = fragment.getAdapter();
        FreeboxContent.setFreebox(getApplicationContext(), adapter, freebox, prefs.getFreeboxPwd());

        if (findViewById(R.id.macaddress_detail_container) != null) {
            // The detail container view will be present only in the
            // large-screen layouts (res/values-large and
            // res/values-sw600dp). If this view is present, then the
            // activity should be in two-pane mode.
            mTwoPane = true;

            // In two-pane mode, list items should be given the
            // 'activated' state when touched.
            fragment.setActivateOnItemClick(true);
        }

        // TODO: If exposing deep links into your app, handle intents here.
    }

    @Override
    protected void onDestroy() {
        FreeboxContent.cancelRefresh();
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        FreeboxContent.pauseRefresh();
        super.onPause();
    }

    @Override
    protected void onRestart() {
        FreeboxContent.resumeRefresh();
        super.onRestart();
    }

    @Override
    protected void onResume() {
        FreeboxContent.resumeRefresh();
        super.onResume();
    }

    /**
     * Callback method from {@link MacAddressListFragment.Callbacks} indicating
     * that the item with the given ID was selected.
     */
    @Override
    public void onItemSelected(String id) {
        if (mTwoPane) {
            // In two-pane mode, show the detail view in this activity by
            // adding or replacing the detail fragment using a
            // fragment transaction.
            Bundle arguments = new Bundle();
            arguments.putString(MacAddressDetailFragment.ARG_ITEM_ID, id);
            MacAddressDetailFragment fragment = new MacAddressDetailFragment();
            fragment.setArguments(arguments);
            getSupportFragmentManager().beginTransaction()
                    .replace(R.id.macaddress_detail_container, fragment)
                    .commit();

        } else {
            // In single-pane mode, simply start the detail activity
            // for the selected item ID.
            Intent detailIntent = new Intent(this, MacAddressDetailActivity.class);
            detailIntent.putExtra(MacAddressDetailFragment.ARG_ITEM_ID, id);
            startActivity(detailIntent);
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        boolean result = super.onCreateOptionsMenu(menu);
        int i = 0;

        i++;
        menu.addSubMenu(0, i, i, "Settings");
        MenuItem item = menu.getItem(i - 1);
        item.setIcon(android.R.drawable.ic_menu_edit);

        return result;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 1:
            Intent settings = new Intent(this,
                    SettingsActivity.class);
            this.startActivity(settings);
            return true;
        }
        return false;
    }
}